HAL EXTI initialization and configuration functions migration ¶
The goal of this page is to show how to migrate the Init sequence using STM32CubeMX2:
Open STM32CubeMX2 GPIO configuration panel.
Configure the SW layer HAL.
Configure EXTI features.
Generate the code.
Note
The EXTI is not limited to GPIO pins. Various internal signals and peripherals can also be routed through EXTI lines.
HAL GPIO configuration panel ¶
Create a new project with the STM32CubeMX2, then start the initialization and the main configuration.
HAL GPIO pin selection and EXTI configuration ¶
Configure the GPIO settings, then enable EXTI to access the EXTI configuration.
The EXTI line should be selected.
Generated EXTI initialization and de-initialization sequences ¶
The EXTI initialization sequence is generated in the
mx_gpio_default_init
function in
mx_gpio_default.c
file under
$YOUR_PROJECT_NAME$/$YOUR_PROJECT_NAME$_SW/generated/STM32Cube_CodeGen.
Related concepts:
|
Topic |
HAL1 Code Snippet |
HAL2 Code Snippet |
|---|---|---|
|
Handle declaration |
GPIO_InitTypeDef GPIO_InitStructure;
|
hal_gpio_config_t gpio_config;
|
|
Initialization and configuration sequence |
static void EXTI4_15_IRQHandler_Config(void)
{
/* Enable GPIOC clock */
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Pin = GPIO_PIN_13;
HAL_GPIO_Init(GPIOC, &GPIO_InitStructure);
/* Enable and set line 4_15 Interrupt to the lowest priority */
HAL_NVIC_SetPriority(EXTI4_15_IRQn, 2, 0);
HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
}
|
system_status_t mx_gpio_default_init(void)
{
HAL_RCC_GPIOC_EnableClock();
gpio_config.mode = HAL_GPIO_MODE_INPUT;
gpio_config.speed = HAL_GPIO_SPEED_FREQ_LOW;
gpio_config.pull = HAL_GPIO_PULL_NO;
gpio_config.output_type = HAL_GPIO_OUTPUT_PUSHPULL;
if (HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_13, &gpio_config) != HAL_OK)
{
return SYSTEM_PERIPHERAL_ERROR;
}
gpio_config.mode = HAL_GPIO_MODE_INPUT;
gpio_config.pull = HAL_GPIO_PULL_NO;
if (HAL_GPIO_Init(HAL_GPIOC, HAL_GPIO_PIN_13, &gpio_config) != HAL_OK)
{
return SYSTEM_PERIPHERAL_ERROR;
}
hal_exti_config_t exti_config;
/* Initialize and configure the EXTI for GPIOC line13 */
HAL_EXTI_Init(&hEXTI13, HAL_EXTI_LINE_13);
exti_config.trigger = HAL_EXTI_TRIGGER_RISING;
exti_config.gpio_port = HAL_EXTI_GPIOC;
HAL_EXTI_SetConfig(&hEXTI13, &exti_config);
/* set line 13 Interrupt priority */
HAL_CORTEX_NVIC_SetPriority(EXTI13_IRQn,
HAL_CORTEX_NVIC_PREEMP_PRIORITY_0,
HAL_CORTEX_NVIC_SUB_PRIORITY_0);
HAL_CORTEX_NVIC_EnableIRQ(EXTI13_IRQn);
return SYSTEM_OK;
}
|
|
Deinitialization sequence |
static void gpio_deinit(void)
{
void HAL_GPIO_DeInit(GPIOC, GPIO_PIN_13);
}
|
system_status_t mx_gpio_default_deinit(void)
{
/* De-initialize the EXTI for GPIOC line 13 */
HAL_EXTI_DeInit(&hEXTI13);
/* Disable line 13 Interrupt */
HAL_CORTEX_NVIC_DisableIRQ(EXTI0_IRQn);
HAL_GPIO_DeInit(HAL_GPIOC, HAL_GPIO_PIN_13);
return SYSTEM_OK;
}
|
|
IRQ handle function |
void EXTI13_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
}
|
void EXTI13_IRQHandler(void)
{
HAL_EXTI_IRQHandler(&exti_line13_handle);
}
|